<?php
namespace CHOMP\SGIBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Nelmio\Alice\Fixtures;
use Doctrine\ORM\EntityRepository;
use CHOMP\SGIBundle\Entity\Rol;
use CHOMP\SGIBundle\Entity\Usuario;
use CHOMP\SGIBundle\Entity\Permiso;
use CHOMP\SGIBundle\Entity\Prioridad;
use CHOMP\SGIBundle\Entity\PermisoAutorizacion;
use CHOMP\SGIBundle\Entity\Empresa;
use Pagerfanta\Adapter\DoctrineORMAdapter;
use CHOMP\SGIBundle\Services\RolHelper;
use JMS\DiExtraBundle\Annotation as DI;
use Symfony\Component\HttpFoundation\Session\Session;


class DataLoaderProdController extends Controller
{ 

	/**
	 * 
	 * @var RolHelper
	 * @DI\Inject("rol.helper")
	 */
	
	public $rolHelper;

    public function loadAction(){
		$objectManager = $this->getDoctrine()->getManager();
		$objects = \Nelmio\Alice\Fixtures::load(__DIR__.'/yml/datos_prod_entrega.yml', $objectManager, array('locale' => 'es_AR',  'providers' => array($this)));
	    $this->crearPrioridadesGenericas();
	    $this->crearPermisosDeEdicion();
	    $this->crearPermisosDeCreacion();
		$this->crearPermisoBorrar();
		$this->crearRolAdministadorRoot();
		$this->asignarPermisosGenericosARoles();
		$this->crearNuestrosUsuarios();
#		$this->crearUsuariosDePruebaCorvalan();
		return new Response('Created (PROD)');
    }


    /*
    	Esto debería ser un PostPersist, hablar con nico para ver que afectaría.
    */
	public function crearPrioridadesGenericas(){
		$em = $this->getDoctrine()->getManager();
		//traigo roles todos
		$empresas = $em->getRepository('CHOMPSGIBundle:Empresa')->createQueryBuilder('r')->getQuery()->getResult();;
		$i = 1;
		foreach( $empresas as $empresa) {
			$prioridad1=new Prioridad($i, 'Severa', '' , 8, $empresa);
			$prioridad2=new Prioridad($i, 'Alta', '', 16, $empresa);
			$prioridad3=new Prioridad($i, 'Media', '', 24, $empresa);
			$prioridad4=new Prioridad($i, 'Baja', '', 32, $empresa);
			$em->persist($prioridad1);
			$em->persist($prioridad2);
			$em->persist($prioridad3);
			$em->persist($prioridad4);
			$i++;
		}
		$em->flush();
	}



   public function crearPermisosDeEdicion() {

        $em = $this->getDoctrine()->getManager();
	
        //traigo permiso de Editar
        $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
	
		foreach( $permisoEdicion as $p){ 
			if ($p->getDescripcion() == 'Editar'){
				$permisoedicion=$p;
			}
		}	

		//traigo todas las autorizaciones
        $autorizaciones = $em->getRepository('CHOMPSGIBundle:Autorizacion')->createQueryBuilder('a')->getQuery()->getResult();

        //creo un permisoAutorizacion de edicion para cada autorizacion
        //(supuestamente inserta ids desde 20 a 40)
        foreach( $autorizaciones as $autorizacion) {
			$permaut= new PermisoAutorizacion($permisoedicion, $autorizacion);
			$em->persist($permaut);
        }
        $em->flush();
   }


   /**
    * Inserta permiso CREAR_INCIDENTE_ALL en la posicion final (41)
    * Inserta permiso CREAR_Empresa_ALL en la posicion final (42)
    */
	public function crearPermisosDeCreacion(){
		$em = $this->getDoctrine()->getManager();
	
        //traigo permiso 'CREAR'
        $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
		foreach( $permisoEdicion as $p){ 
			if ($p->getDescripcion() == 'Crear'){
				$permiso_crear = $p;
			}
		}

		//traigo autorizacion INCIDENTE_ALL
		$query2 = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo') 
		->setParameter(':obj','Incidente')
		->setParameter(':campo','ALL'); //Incidente ALL
		
		$autorizacion = $query2->getResult();

		//creo parmAut CREAR_INCIDENTE_ALL
		$permaut= new PermisoAutorizacion($permiso_crear, $autorizacion[0]);
		$em->persist($permaut);


		//traigo autorizacion EMPRESA_ALL
		$query3 = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo')
            ->setParameter(':obj','Empresa')
            ->setParameter(':campo','ALL'); 

        $autorizacion2 = $query3->getResult();

        //creo parmAut CREAR_EMPRESA_ALL
        $permaut= new PermisoAutorizacion($permiso_crear, $autorizacion2[0]);
        $em->persist($permaut);

		$em->flush();
	}



   /**
    * Inserta permiso Borrar_Empresa en la posicion (43)
    */
    public function crearPermisoBorrar(){
		$em = $this->getDoctrine()->getManager();

		//traigo permiso 'BORRAR'
	    $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
        foreach( $permisoEdicion as $p){
            if ($p->getDescripcion() == 'Borrar'){
                    $permiso_crear = $p;
            }
        }

        //traigo autorizacion EMPRESA_ALL
        $query = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo')
        ->setParameter(':obj','Empresa')
        ->setParameter(':campo','ALL'); //Incidente ALL

        $autorizacion = $query->getResult();

        //creo parmAut BORRAR_EMPRESA_ALL
        $permaut= new PermisoAutorizacion($permiso_crear, $autorizacion[0]);
        $em->persist($permaut);
        $em->flush();
    }

    /*
    	Como el admin root va a ser solo para nosotros,
    	lo creo manualmente para empresa 'SGI'
    */
    public function crearRolAdministadorRoot(){
    	//get empresa 'SGI'
    	$em = $this->getDoctrine()->getManager();
    	$query = $em->createQuery('SELECT e FROM CHOMPSGIBundle:Empresa e WHERE e.nombre =:n')
            ->setParameter(':n','SGI');

        $emp_administrador = $query->getResult();

        $rolAdminRoot = new Rol ('Administrador Root', 'Puede crear empresas, ctas analiticas, usuarios, asignar permisos y roles. Tiene acceso al modulo de seguridad y puede editar permisos. Ve todas las empresas, usuarios, etc', $emp_administrador[0]);
        $em->persist($rolAdminRoot);
        $em->flush();
    }


    /*
    * Asigna los permisos genericos correspondientes a cada rol	
    */
    public function asignarPermisosGenericosARoles(){
		$em = $this->getDoctrine()->getManager();
        $roles = $em->getRepository('CHOMPSGIBundle:Rol')->createQueryBuilder('r')->getQuery()->getResult();
		foreach( $roles as $rol){ 
			
			if ($rol->getNombre() == 'Administrador'){
				$rol->addPermisos( $this->rolHelper->insertPermisosForAdministrador($rol->getEmpresa()->getId()) );
				$em->persist($rol);
			}else{
				if ($rol->getNombre() == 'Operador'){
					$rol->addPermisos( $this->rolHelper->insertPermisosForOperador($rol->getEmpresa()->getId()) );
					$em->persist($rol);
				}else{
					if ($rol->getNombre() == 'Coordinador'){
						$rol->addPermisos( $this->rolHelper->insertPermisosForCoordinador($rol->getEmpresa()->getId()) );
						$em->persist($rol);
					}else{
						if ($rol->getNombre() == 'Cliente Externo'){
							$rol->addPermisos( $this->rolHelper->insertPermisosForClienteExterno($rol->getEmpresa()->getId()) );
							$em->persist($rol);
						}else{
							if($rol->getNombre() == 'Administrador Root'){
								$rol->addPermisos( $this->rolHelper->insertPermisosForAdministradorRoot($rol->getEmpresa()->getId()) );
								$em->persist($rol);
							}
						}
					}
				}
			}
			
		}
		$em->flush();
    }

    /*
    	crea nuestros usuarios para empresa SGI 
    */
    public function crearNuestrosUsuarios(){
    	$em = $this->getDoctrine()->getManager();
    	//get empresa 'SGI'
    	$query = $em->createQuery('SELECT e FROM CHOMPSGIBundle:Empresa e WHERE e.nombre =:n')
            ->setParameter(':n','SGI');
    	
    	$empresa_administrador = $query->getResult();
    	

    	//get rol administrador root
    	$query2 = $em->createQuery('SELECT r FROM CHOMPSGIBundle:Rol r WHERE r.nombre =:n')
            ->setParameter(':n','Administrador Root');

        $rol_admin_root = $query2->getResult();


      	$adm = new Usuario();
    	$adm->setNombre('administrador');
    	$adm->setApellido('administrador');
    	$adm->setLogin('administrador'); 
    	$adm->setEmail('admin@chompsgi.com.ar');
        //$adm->setPassword('administrador///PV5abEmwNlR3l/mCtFoxrsARXDa6VnLPNbUN65TL/p4=');
    	$adm->setPassword('administrador///6xLnepv4xWk7JzmFfxI7y/7eZeO4L1Gr5jq5t7CZdUM=');
    	$adm->setTelefono('44444444');
    	$adm->setpasswordExpiryDate(new \DateTime('1995-12-15'));
    	$adm->setEstado('0');
    	$adm->setBorrado(false);
    	$adm->setEmpresa($empresa_administrador[0]);
    	$adm->setRol($rol_admin_root[0]);
		$em->persist($adm);
    	
        $em->flush();
    	
    }

    /*
    	Crear usuarios de empresa corvalan para testear
    */
    public function crearUsuariosDePruebaCorvalan(){
    	$em = $this->getDoctrine()->getManager();
    	//get empresa 'administrador'
    	$query = $em->createQuery('SELECT e FROM CHOMPSGIBundle:Empresa e WHERE e.nombre =:n')
            ->setParameter(':n',"Corvalan CIA");
    	
    	$empresa_corvalan = $query->getResult();
    	

    	//get rol administrador empresa
    	$query = $em->createQuery('SELECT r FROM CHOMPSGIBundle:Rol r WHERE r.empresa =:e')
            ->setParameter(':e', $empresa_corvalan[0]->getId());
        $roles = $query->getResult();
        foreach( $roles as $rol){     
        	if ($rol->getNombre() == 'Administrador'){
        		$us = new Usuario();
		    	$us->setNombre('Corvalan');
		    	$us->setApellido('Administrador');
		    	$us->setLogin('corvalanAdministrado'); 
		    	$us->setEmail('corvalan44@chompsgi.com.ar');
		    	$us->setPassword('corvalanAdministrado///6xLnepv4xWk7JzmFfxI7y/7eZeO4L1Gr5jq5t7CZdUM=');
		    	$us->setTelefono('44444444');
		    	$us->setpasswordExpiryDate(new \DateTime('1995-12-15'));
		    	$us->setEstado('0');
		    	$us->setBorrado(false);
		    	$us->setEmpresa($empresa_corvalan[0]);
		    	$us->setRol($rol);
				$em->persist($us);	
        	}else
        	if($rol->getNombre() == 'Coordinador'){
        		$us = new Usuario();
		    	$us->setNombre('Corvalan');
		    	$us->setApellido('Coordinador');
		    	$us->setLogin('corvalanCoordinador'); 
		    	$us->setEmail('corvalan444@chompsgi.com.ar');
		    	$us->setPassword('corvalanCoordinador///6xLnepv4xWk7JzmFfxI7y/7eZeO4L1Gr5jq5t7CZdUM=');
		    	$us->setTelefono('44444444');
		    	$us->setpasswordExpiryDate(new \DateTime('1995-12-15'));
		    	$us->setEstado('0');
		    	$us->setBorrado(false);
		    	$us->setEmpresa($empresa_corvalan[0]);
		    	$us->setRol($rol);
				$em->persist($us);	
        	}else
        	if($rol->getNombre() == 'Operador'){
        		$us = new Usuario();
		    	$us->setNombre('Corvalan');
		    	$us->setApellido('Operador');
		    	$us->setLogin('corvalanOperador'); 
		    	$us->setEmail('corvalan4444@chompsgi.com.ar');
		    	$us->setPassword('corvalanOperador///6xLnepv4xWk7JzmFfxI7y/7eZeO4L1Gr5jq5t7CZdUM=');
		    	$us->setTelefono('44444444');
		    	$us->setpasswordExpiryDate(new \DateTime('1995-12-15'));
		    	$us->setEstado('0');
		    	$us->setBorrado(false);
		    	$us->setEmpresa($empresa_corvalan[0]);
		    	$us->setRol($rol);
				$em->persist($us);	
        	}else
            if($rol->getNombre() == 'Cliente Externo'){
                $us = new Usuario();
                $us->setNombre('Corvalan');
                $us->setApellido('Externo');
                $us->setLogin('corvalanExterno');
                $us->setEmail('corvalan44444@chompsgi.com.ar');
                $us->setPassword('corvalanExterno///6xLnepv4xWk7JzmFfxI7y/7eZeO4L1Gr5jq5t7CZdUM=');
                $us->setTelefono('44444444');
                $us->setpasswordExpiryDate(new \DateTime('1995-12-15'));
                $us->setEstado('0');
                $us->setBorrado(false);
                $us->setEmpresa($empresa_corvalan[0]);
                $us->setRol($rol);
                $em->persist($us);
            }
	    }

		$em->flush();
    }

} 
	
	



